package com.zhang.a_simple;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class B_consumer {


    //这是程序的入口
    public static void main(String[] args) throws IOException, TimeoutException {
        //1.创建Connection
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.233.100");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
        Connection connection = factory.newConnection();


        //2.创建channel
        Channel channel = connection.createChannel();


        //3.创建队列
        channel.queueDeclare("q1",true,false,false,null);


        //4.监听队列
        //(1)当收到消息后执行该方法
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println("消费者受到消息:"+message);
        };
        //(2)接收消息
        /**
         *  第一个参数queue:指定监听的队列
         *  第二个参数autoAck: 是否自动确认
         *                      true自动确认: 当消费者收到消息后会自动告诉队列我收到消息了
         *                      false不自动确认: 这时可设置手动确认,和批量确认
         *  第三个参数deliverCallback: 当收到消息时的回调
         *  第四个参数cancelCallback:  当消费者被取消时的回调
         */
        channel.basicConsume("q1", true, deliverCallback, consumerTag -> { });

    }
}
